package com.sansui.blog.dao;

import com.sansui.blog.pojo.Blog;
import com.sansui.blog.pojo.vo.BlogInfoQuery;
import com.sansui.blog.pojo.vo.BlogQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @name: BlogDao
 * @author: Sansui
 * @Software: IDEA
 * @Blog: https://www.cnblogs.com/sansui6/
 * @date: 2022-04-03 00:52
 **/
@Mapper
public interface BlogDao {


    /**
     * 获取首页博客相关信息
     * @return
     */
    Map<String, Object> countBlogInfo();



    /**
     * 获取博客文章信息
     * @param page
     * @param limit
     * @return
     */
    List<Blog> getAllBlogByPage(@Param("page") Integer page, @Param("limit") Integer limit);

    /**
     * 获取博客总数
     * @return
     */
    Integer countBlog();

    /**
     * 根据id获取博客信息
     * @param blogId
     * @return
     */
    Blog getBlogById(Long blogId);


    /**
     * 根据id获取文章对应标签信息
     * @param blogId
     * @return
     */
    List<Map<String, Object>> getBlogIsTagsInfo(Long blogId);

    /**
     * 根据博客id查询创建用户
     * @param blogId
     * @return
     */
    Blog getCreateUserById(Long blogId);

    /**
     * 更新博客状态
     * @param blogId
     * @param status
     * @return
     */
    Integer updateStatus(@Param("blogId") Long blogId, @Param("status") String status);

    /**
     * 发布文章
     * @param blog
     * @return
     */
    Integer addBlog(Blog blog);

    /**
     * 修改文章
     * @param blog
     * @return
     */
    Integer updateBlog(Blog blog);

    /**
     * 删除文章
     * @param blogId
     * @return
     */
    Integer deleteBlog(Long blogId);

    /**
     * 批量删除文章
     * @param delList
     */

    void deleteBlogByIds(List<String> delList);

    /**
     * 后台多条件查询文章
     * @param blog
     * @return
     */

    List<Blog> blogQuery(BlogQuery blog);


    /**
     * 根据博客id查询 翻页信息
     * @param blogId
     * @return
     */
    List<BlogInfoQuery> getBogPageChange(@Param("blogId")Long blogId,@Param("type") String type);


    /**
     * 根据分类id\标签id\模糊查询博客
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<BlogInfoQuery> queryAllByPage(@Param("pageNum") Integer pageNum,
                                 @Param("pageSize") Integer pageSize,
                                 @Param("typesId") Long typeId,
                                 @Param("tagsId") Long tagId,
                                 @Param("keyword") String keyword);

    /**
     * 查询博客数量
     * @param keyword
     * @return queryAllCount
     */

    Long queryAllCount(@Param("typesId") Long typeId,
                                @Param("tagsId") Long tagId,
                                @Param("keyword") String keyword);


    /**
     * 获取首页推荐博客信息
     * @return
     */
    List<Blog> getRecommendedBlog();

    /**
     * 更新博客访问量
     * @param blogId
     * @return
     */
    Integer updateBlogViews(Long blogId);


}
